package com.tuars.instalacionesalberti.controllers.familia;

import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.Statement;
import java.sql.SQLException;
import java.util.ArrayList;

import javax.swing.JOptionPane;

import com.tuars.instalacionesalberti.connection.bd.ConnectionBaseDades;

public class ObtenerFamilias {
	
	private String [] CodFamArrayFamilias;
	private String [] NombreArrayFamilias;
		
	public ObtenerFamilias() {

	}



	public ObtenerFamilias(String[] codFamArrayFamilias, String[] nombreArrayFamilias) {
		CodFamArrayFamilias = codFamArrayFamilias;
		NombreArrayFamilias = nombreArrayFamilias;
	}
	
	
	public String[] getCodFamArrayFamilias() {
		return CodFamArrayFamilias;
	}



	public void setCodFamArrayFamilias(String[] codFamArrayFamilias) {
		CodFamArrayFamilias = codFamArrayFamilias;
	}



	public String[] getNombreArrayFamilias() {
		return NombreArrayFamilias;
	}



	public void setNombreArrayFamilias(String[] nombreArrayFamilias) {
		NombreArrayFamilias = nombreArrayFamilias;
	}

	
	/**
	 * Los siguientes metodos junto a la creaci�n de la tabla en la classe de la vista correspondiente
	 * Nos introducen los datos de la base de datos en la tabla crada
	 * Mediante un array multidimencional
	 */
	//Datos de las filas
	/**
	 * 
	 * @return datos que contendran las filas de la tabla
	 */
	public Object[][] getFilas()
    {
         Object fila[][]=FuncionMySQL("SELECT * FROM FAMILIA");
         return fila;
    }
	//TODO mirar si este metodo se puede eliminar
//	public String[] getFilasString()
//    {
//		String sql = "SELECT * FROM FAMILIA"; 
//		Object fila[][]=FuncionMySQL(sql);
//                 
//         ConnectionBaseDades conexion = new ConnectionBaseDades();
//         String [] elementosFamilia =new String[conexion.numeroDeFilas(sql)];
//         for (int i = 0; i > conexion.numeroDeFilas(sql) ; i++){
// 			elementosFamilia [i]= (String) fila[0][i];
//         }
//         return elementosFamilia;
//    }
	
 
    //Encabezados de la tabla
	/**
	 * 
	 * @return nombre que se le pondran a las columnas de la tabla 
	 */
	public String[] getColumnas()
    {
          String columna[]=new String[]{"Codigo familia","Nombre"};
          return columna;
    }
	
	/**
	 * 
	 * @param rs Objecto ResultSet
	 * @return datos de la base de datos
	 */
    private Object[][] ResultSetToArray(ResultSet rs){
        Object obj[][]=null;
 
        try
        {
 
        rs.last();
 
        ResultSetMetaData rsmd = rs.getMetaData();
 
        int numCols = rsmd.getColumnCount();
 
        int numFils =rs.getRow();
 
        obj=new Object[numFils][numCols];
        int j = 0;
 
        rs.beforeFirst();
 
        while (rs.next())
        {
            for (int i=0;i<numCols;i++)
            {
 
                obj[j][i]=rs.getObject(i+1);
            }
            j++;
 
        }
 
        }
        catch(Exception e)
        {
 
        }
 
        return obj;
    }
 
    private Object[][] FuncionMySQL(String querySql){
 
            try
            {
                    ConnectionBaseDades con = new ConnectionBaseDades();
                    Statement s = con.Conexion().createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
                                                      ResultSet.CONCUR_READ_ONLY);
 
                    ResultSet rs = s.executeQuery(querySql);
                    Object[][] arr = ResultSetToArray(rs);
 
                    s.close();
                    rs.close();
                    con.Conexion().close();
 
                    return arr;
 
            }
            catch(Exception e)
            {
            	JOptionPane.showMessageDialog(null, "Error de la base de datos al listar las familias", "Error al listar familias", JOptionPane.ERROR_MESSAGE);
            }
 
            return null;
    }
    
    @SuppressWarnings({ "unused", "null" })
	public Object[] ResultSetArrayCodigoFamilia(){

        Object [] codigoFamilia = null;
    	
    	try{
    		ConnectionBaseDades conec = new ConnectionBaseDades();
            Statement s = conec.Conexion().createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
                                              ResultSet.CONCUR_READ_ONLY);

            ResultSet resSet = s.executeQuery("SELECT * FROM FAMILIA");

            s.close();
            resSet.close();
            conec.Conexion().close();
            
        	Object[][] objeto = ResultSetToArray(resSet);
        	
    		int numFils = conec.numeroDeFilas("SELECT * FROM FAMILIA");
    		
    		for(int i=0; i > numFils; i++){
    			codigoFamilia[i]=objeto[0][i];
    			System.out.println(codigoFamilia[i]);
    			return codigoFamilia;
    		}
    		resSet.close();
        	s.close();
        	conec.Conexion().close();
    	}catch(SQLException e){
    		JOptionPane.showMessageDialog(null, "Error al conseguir el result set de los datos", "Error metodo ResultSetArrayCodigoFamilia", JOptionPane.ERROR_MESSAGE);
    	}
    	
    	return codigoFamilia;
    }
    
    /**
     * Metodos para llenar la JList familia
     * @return ArrayList con los codigos de las Familias
     * @throws SQLException 
     */
    public ArrayList<String> llenarLista() throws SQLException{
    	ConnectionBaseDades con = new ConnectionBaseDades();
    	ResultSet rs = null;
    	Statement st = null;
    	
    	String sql = "SELECT Nombre FROM FAMILIA";
    	
    	ArrayList<String> list = new ArrayList<String>();
    	
    	st = con.Conexion().createStatement();
    	rs = st.executeQuery(sql);
    	
    	while (rs.next()) {
			String nombre = rs.getString("Nombre");
			list.add(nombre);
		}
    	rs.close();
    	st.close();
    	con.Conexion().close();    	
    	return list;

    }
    
    /**
     * Metodo para llenar un JComboBox con el codigo del producto
     * @return ArrayList con los codigos de las familias
     * @throws SQLException
     */
    public ArrayList<String> llenarListaCodigo() throws SQLException{
    	ConnectionBaseDades con = new ConnectionBaseDades();
    	ResultSet rs = null;
    	Statement st = null;
    	
    	String sql = "SELECT Codigo_Familia FROM FAMILIA";
    	
    	ArrayList<String> list = new ArrayList<String>();
    	
    	st = con.Conexion().createStatement();
    	rs = st.executeQuery(sql);
    	
    	while (rs.next()) {
			String nombre = rs.getString("Codigo_Familia");
			list.add(nombre);
		}
    	rs.close();
    	st.close();
    	con.Conexion().close();
    	return list;

    }
    
}
